Quick-Sourcetext
D1:DE.QIK   
----------------
Length: $0000

Free  : $9999
----------------

************************************
* Copyright (c) 2015 Jim Wilkinson *
************************************

INCLUDE
[
D:FE.LIB
]

BYTE
 [
 SETDLI

 MX=178
 MY=179
 MB=180

 PMCOL0=704 ;player colours
 PMCOL1=705
 PMCOL2=706
 PMCOL3=707
 PMCOL5=709
 PMCOL7=711
 HPMCOL7=53273

 PFCOL0=53270 ;playfield colour
 PFCOL1=53271
 PFCOL2=53272
 PFCOL3=53273
 PFCOL4=53274

 *disk i/o
 DBCDRV=769 ;drive #
 DBCCMD=770 ;command
 DBCALO=772 ;buffer low
 DBCAHI=773 ;buffer high
 DBCSLO=778 ;sector low
 DBCSHI=779 ;sector high
 
 RANDOM=53770
 RND
 DMA=54272
 SDMA=559
 CHBAS=54281 ;756
 KEYBD=764
 CONSOL=53279
 GRACTL=53277
 PMBASE=54279
 STICK0=632

 *motion variables
 STRIG0=644
 STRIG1=645
 PRIOR=623

 *Players
 HORZP0=53248
 HORZP1=53249
 HORZP2=53250
 HORZP3=53251

 *Player size
 SIZEP0=53256
 SIZEP1=53257
 SIZEP2=53258
 SIZEP3=53259

 *missile map pointer
 MISL0=53252
 MISL1=53253
 MISL2=53254
 MISL3=53255

 SIZEM=53260

 *mouse pointer
 XX,YY

 *scrolling
 HEXSP
 DECSP
 SCRLDELAY
 KEYDELAY
 CONDELAY
 MCOL

 *misc
 CURRBYTE
 ASCIIMODE
 EDITMODE
 MODE
 FILELIST
 MAXFILES
 SETDLI
 SPACING
 ]

WORD
 [
 SDLSTL=560 ;DPL address
 DD,MM        ;Utility
 *Dynamic Sounds
 DS1MEM ;start mem of current snd 

 *sector handling
 CURSEC ;current
 SRANGE ;start of range
 ERANGE ;end of range
 
 *last highlight
 LHSTART
 LHEND
 LHSTARTD
 LHENDD
 LEDITHL
 ]

ARRAY
 [
 *temp strings
 S(40)=9624 ;temp
 ST(10)
 TOPLINE(40)=7936
 BOTLINE(40)=7976
 ]

************************************
*** MAIN LOOP ***
************************************

MAIN
 .INIT()        ;Initialize

 SDMA=62 ;Turn on screen

 REPEAT

  .KEYCHECK()
  .MOUSECHK()
  .CONSOLE()
  .READMOUSE()
  .READSTICKS()

  *disable attract mode
  POKE(77,0)

 UNTIL 2=3 ;end of main loop

ENDMAIN

************************************
************************************
************************************

PROC INIT
LOCAL
 BYTE
 [
 X
 ]
BEGIN

 SDMA=0 ;Screen off

 *handle system reset
 POKE(12,0)
 POKE(13,80)

 *! temp debugging
 OPEN(5,8,0,"P:")

 *explorer display list
 DATA(1536)
 [
  112
  112
  128
  66,0,31
  128
  66,0,32
  66,64,32
  66,128,32
  66,192,32
  128
  66,0,50
  66,0,51
  128
  66,0,39
  128
  66,0,38
  66,32,38
  66,64,38
  66,96,38
  128

  68,0,34
  128
  68,32,34
  128
  69,0,34
  128
  69,32,34
  128

  70,0,35
  128
  70,16,35
  128
  71,0,35
  128
  71,16,35
  128
  66,0,35
  65,0,6
 ] 

 DATA(1619) ;options DL
 [
  112
  112
  0
  66,120,31
  0
  66,0,52
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  65,83,6
 ]

 DATA(1651) ;editor
 [
  112
  112
  128
  66,80,31
  128
  66,0,55
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  128
  68,0,35
  69,0,35
  0
  70,40,35
  70,60,35
  0
  66,0,35
  128      ;DLIE4
  66,0,58
  2
  2
  65,115,6
 ]

 DATA(1704) ;selector
 [
  112
  112
  128
  66,160,31
  128
  66,0,59
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  2
  128
  2
  2
  2
  2
  2
  2
  128
  2
  65,168,6
 ]

 DATA(1744) ;title page
 [
  112
  112
  128
  71,0,29
  128
  112
  70,20,29
  0
  0
  0
  66,60,29
  2
  2
  2
  2
  65,208,6
 ]

 DATA(12288)
 [
 0,0,0,0
 000,002,004,072,112,112,120,000
 0,0,0,0
 ]

 DATA(12544)
 [
 255,255,255,255,255,255,255,255
 255,255,255,255,255,255,255,255
 255,255,255,255,255,255,255,255
 255,255,255,255,255,255,255,255
 255,255,255,255,255,255,255,255
 255,255,255,255,255,255,255,255
 255,255,255
 ]

 *sample chars
 CLR(34,4)
 CLR(160,1)
 DATA(8704) ;0,34
 [
 001,000,002,000,003,000,004,000
 005,000,006,000,007,000,008,000
 001,000,002,000,003,000,004,000
 005,000,006,000,007,000,008,000

 009,000,010,000,011,000,012,000
 013,000,014,000,015,000,016,000
 009,000,010,000,011,000,012,000
 013,000,014,000,015,000,016,000
 ]


 DATA(8768) ;64,34
 [
 001,001,002,002,003,003,004,004
 005,005,006,006,007,007,008,008
 001,001,002,002,003,003,004,004
 005,005,006,006,007,007,008,008

 009,009,010,010,011,011,012,012
 013,013,014,014,015,015,016,016
 009,009,010,010,011,011,012,012
 013,013,014,014,015,015,016,016

 001,001,002,002,003,003,004,004
 005,005,006,006,007,007,008,008
 009,009,010,010,011,011,012,012
 013,013,014,014,015,015,016,016
 ]


 DATA(8960) ;0,35
 [
 001,000,002,000,003,000,004,000
 005,000,006,000,007,000,008,000
 009,000,010,000,011,000,012,000
 013,000,014,000,015,000,016,000

 000,000,000,000,000,000,000,000
 001,000,002,000,003,000,004,000
 005,000,006,000,007,000,008,000
 000,000,000,000
 009,000,010,000,011,000,012,000
 013,000,014,000,015,000,016,000
 000,000,000,000
 ]
 
 *menu
 CLR(31,1)

 *INIT PMs
 CLR(40,8) ;wipe prg RAM
 PMBASE=40 ;PMBASE
 GRACTL=3  ;GRACTL
 SIZEM=0   ;missile sizes

 UNSIGN

 *Fire the Interrupts
 VBI(VERTBLNK)
 SETDLI=20

 *P/M setup
 PRIOR=26 ;Player priority
 PMCOL0=14
 PMCOL1=14
 MCOL=12

 *setup screens
 CURSEC=1
 MODE=20
 .DRAWSCRN(1) ;init select screen
 MODE=1
 .DRAWSCRN(1) ;init explorer

 *explorer background
 SIZEP2=3
 SIZEP3=3
 PMCOL2=10
 PMCOL3=10
 PLAYER(46,126,51,12544) ;pm2
 PLAYER(47,126,51,12544) ;pm3

 *INIT variables
 LHSTART=0 ;last highlights
 LHEND=0
 LHSTARTD=0
 LHENDD=0
 LEDITHL=0
 XX=0
 YY=0
 HEXSP=0 ;init explr scroll
 DECSP=0

 ASCIIMODE=0
 EDITMODE=3
 KEYDELAY=0
 SCRLDELAY=0
 CONDELAY=10
 FILELIST=0
 MAXFILES=0
 SRANGE=0
 ERANGE=0
 SPACING=0

 *menus
 S="EXPLORER"
 .DISPCHAR(7936,8,96)
 S="sector"
 .DISPCHAR(7952,6,0) ;explorer
 .DISPCHAR(8112,6,0) ;selector
 .DISPCHAR(8032,6,0) ;editor
 
 *page titles
 S="OPTIONS"
 .DISPCHAR(8056,7,96)
 S="EDITOR"
 .DISPCHAR(8016,6,96)
 S="SELECTOR"
 .DISPCHAR(8096,8,96)

 *start with tilepage
 .SCREEN(5)
 .DRAWSCRN(0)
 SDMA=62

 *reset
 KEYBD=255
 CONSOL=8
 X=0
 REPEAT
  IF CONSOL<>7
   X=1
  ENDIF
  IF KEYBD<>255
   X=1
  ENDIF
 UNTIL X>0
 KEYBD=255
 CONSOL=8

 .SCREEN(2) ;selector
 .DRAWSCRN(0)

ENDPROC ;INIT

************************************

PROC READDATA
IN
 WORD
 [
  SEC
 ]
LOCAL
 BYTE
 [
  B,HI,L
 ]
BEGIN
 *get high and low of sector#
 DIV(SEC,256,HI)
 MULT(HI,256,DD)
 SUB(SEC,DD,L)
 *set buffer address
 DBCALO=0
 DBCAHI=7
 *set sector number
 DBCSLO=L
 DBCSHI=HI
 *set r/w mode
 DBCCMD=82 ;read
 *set drive #
 DBCDRV=1
 *execute DSKINV
 CALL(0,0,0,$E453)
 *move buffered bytes to spec loc
 FMOVE(1792,7168,128)
ENDPROC

************************************

PROC WRITEDATA
IN
 WORD
 [
  SEC
 ]
LOCAL
 BYTE
 [
  B,HI,L
 ]
BEGIN
 *get high and low of sector#
 DIV(SEC,256,HI)
 MULT(HI,256,DD)
 SUB(SEC,DD,L)
 *set buffer address
 DBCALO=0
 DBCAHI=7
 *set sector number
 DBCSLO=L
 DBCSHI=HI
 *set r/w mode
 DBCCMD=87 ;write
 *set drive #
 DBCDRV=1
 *execute DSKINV
 CALL(0,0,0,$E453)
ENDPROC

************************************

